package dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;

import bean.BiedingBean;
import bean.GebruikerBean;
import bean.VeilingBean;
import db.DBManager;

/**
 *  Dao voor de bieding table
 *
 */

public class BiedingDao
{

	private DBManager manager;
	private String getBiedingPrepare = "SELECT * FROM biedingen JOIN Gebruikers ON Gebruikers.g_id = Biedingen.g_id WHERE v_id = ? ORDER BY bod";
	private String addBiedingPrepare = "INSERT INTO biedingen (v_id,g_id,biedtijdstip,bod) VALUES(?,?,?,?)";
	private String delBiedingenPrepare = "DELETE FROM biedingen WHERE b_id = ?";

	PreparedStatement getBieding, addBieding, delBieding;

	public BiedingDao(DBManager manager)
	{
		this.manager = manager;
		try
		{
			getBieding = manager.getConnection().prepareStatement(getBiedingPrepare);
			addBieding = manager.getConnection().prepareStatement(addBiedingPrepare);
			delBieding = manager.getConnection().prepareStatement(delBiedingenPrepare);
		} catch (SQLException e)
		{
			e.printStackTrace();
		}
	}

	public void addBieding(GebruikerBean gebruiker, VeilingBean veiling, int bod)
	{
		try
		{
			addBieding.setInt(1, veiling.getId());
			addBieding.setInt(2, gebruiker.getId());
			addBieding.setTimestamp(3, new Timestamp(Calendar.getInstance().getTimeInMillis()));
			addBieding.setInt(4, bod);
			addBieding.execute();
		} catch (SQLException e)
		{
			e.printStackTrace();
		}
	}
	public ArrayList<BiedingBean> getBiedingen(VeilingBean veiling)
	{
		ArrayList<BiedingBean> biedingen = new ArrayList<BiedingBean>();
		try
		{
			getBieding.setInt(1, veiling.getId());
			ResultSet set = getBieding.executeQuery();
			ResultSetMetaData setMetaData = set.getMetaData();

			while (set.next())
			{
				GebruikerBean gebruiker = new GebruikerBean(set.getInt("g_id"), set.getString("gnaam"),
						set.getString("adres"), set.getString("email"), set.getString("geboortedatum"),
						set.getString("wachtwoord"));

				Calendar biedtijd = Calendar.getInstance();
				biedtijd.setTimeInMillis(set.getTimestamp("biedtijdstip").getTime());

				BiedingBean bieding = new BiedingBean(set.getInt("b_id"), veiling, gebruiker, biedtijd,
						set.getInt("bod"));
				biedingen.add(bieding);
			}
		} catch (SQLException e)
		{
			e.printStackTrace();
		}
		return biedingen;
	}

	public void delBieding(int biedingid)
	{
		try
		{
			delBieding.setInt(1, biedingid);
			delBieding.execute();
		} catch (SQLException e)
		{
			e.printStackTrace();
		}
	}

	public BiedingBean getHoogsteBieding(VeilingBean veiling)
	{

		BiedingBean hoogsteBieding = null;
		try
		{
			getBieding.setInt(1, veiling.getId());
			ResultSet set = getBieding.executeQuery();
			ResultSetMetaData setMetaData = set.getMetaData();
			while (set.next())
			{
				GebruikerBean gebruiker = new GebruikerBean(set.getInt("g_id"), set.getString("gnaam"),
						set.getString("adres"), set.getString("email"), set.getString("geboortedatum"),
						set.getString("wachtwoord"));

				BiedingBean bieding = new BiedingBean(set.getInt("b_id"), veiling, gebruiker, Calendar.getInstance(),
						set.getInt("bod"));

				if (hoogsteBieding == null || bieding.getBod() > hoogsteBieding.getBod())
					hoogsteBieding = bieding;
			}
		} catch (SQLException e)
		{
			e.printStackTrace();
		}

		return hoogsteBieding;

	}

}
